/**
 * form cookie自动保存回显 by minkey
 * form提交事件之后记录cookie.
 * 支持多个form,每个form必须有唯一id
 * form中需要记录的有效标签的name和value必须不能为空
 * cookie失效时间为30天 
 * 纯绿色插件,需要此功能的页面直接引用此js和依赖的js即可.无须修改源代码
 */
function cookieForm(){
	//失效时间
	var expiresTime = 30;
	//初始化
	init = function (){
		findForm();
	}
	/**
	 * 查找页面所有form
	 * @memberOf {TypeName} 
	 */
	findForm = function (){
	  $("form").each(function(){
		if(undefined == $(this).attr("noCookie") || !$(this).attr("noCookie")){
		   initForm($(this));
		   reFormVal($(this));
		}
	  });
	}

	/**
	 * 监听form提交事件
	 * @param {Object} form
	 * @return {TypeName} 
	 */
	initForm = function(form){
		if(!form){
			return; 
		}
		form.bind('submit', beforeSub);
	};
	/**
	 * 监听提交按钮,并记录cookie
	 * @param {Object} e
	 */
	beforeSub = function(e){
		var d = findElementData(e.target);
		$.cookie(e.target.id, null);
		$.cookie(window.location.pathname+"_"+e.target.id, $.toJSON( d ), { expires: expiresTime ,path:"/"});
	}
	/**
	 * 找到有用元素并且封装数据
	 * @param {Object} form
	 * @memberOf {TypeName} 
	 * @return {TypeName} 
	 */
	findElementData = function (form){
		var eds = [];
		
		var d ;
		//input
		$(form).find("input").each(function(){
			d = {};
	    	if($(this).attr("type") == 'button' || $(this).attr("type") == 'submit'
	    		|| $(this).attr("type") == 'reset' || $(this).attr("type") == 'submit'){
	    		
	    	}else if ($(this).val() == '' || $(this).attr('name') == ''){
	    		
	    	}else if( $(this).attr("type") == 'text'){
	    		d.eName= $(this).attr('name');
	    		d.eVal= $(this).val();
	    		d.eType= 'text';
	    		eds.push(d);
	    	}else if( $(this).attr("type") == 'radio' && $(this).prop('checked')){
	    		d.eName= $(this).attr('name');
	    		d.eVal= $(this).val();
	    		d.eType= 'radio';
	    		eds.push(d);
	    	}else if( $(this).attr("type") == 'checkbox' && $(this).prop('checked')){
	    		d.eName= $(this).attr('name');
	    		d.eVal= $(this).val();
	    		d.eType= 'checkbox';
	    		eds.push(d);
	    	}
	  	});
		
		//textarea
		$(form).find("textarea").each(function(){
			d = {};
			if ($(this).val() == '' || $(this).attr('name') == ''){
	    		
	    	}else{
				d.eName= $(this).attr('name');
	    		d.eVal= $(this).val();
	    		d.eType= 'textarea';
	    		eds.push(d);
	    	}
		});
		
		//select
		$(form).find("select").each(function(){
			d = {};
			if ($(this).val() == '' || $(this).attr('name') == ''){
	    		
	    	}else{
				d.eName= $(this).attr('name');
	    		d.eVal= $(this).val();
	    		d.eText= $(this).find("option:selected").text();
	    		d.eType= 'select';
	    		eds.push(d);
	    	}
		});
		return eds;
	}
	
	/**
	 * 获取已经存在的cookie
	 */
	reFormVal = function(form){
		var cookieD = $.cookie(window.location.pathname+"_"+form.attr('id'));
		if(cookieD == null){
			return;
		}
		setData(form,cookieD)
		
	}
	
	/**
	 * 页面加载之后赋值
	 * @param {Object} form
	 * @param {Object} data
	 * @memberOf {TypeName} 
	 */
	setData = function (form,data){
		var eds = $.evalJSON( data );
		$(eds).each(function(){
			if($(this).attr('eType')=='text'){
				form.find("input[name='"+$(this).attr('eName')+"']").val($(this).attr('eVal'));
			}else if($(this).attr('eType')=='textarea'){
				form.find("textarea[name='"+$(this).attr('eName')+"']").val($(this).attr('eVal'));
			}else if($(this).attr('eType')=='radio'){
				form.find("input[name='"+$(this).attr('eName')+"'][value='"+$(this).attr('eVal')+"']").prop("checked",true);
			}else if($(this).attr('eType')=='checkbox'){
				form.find("input[name='"+$(this).attr('eName')+"'][value='"+$(this).attr('eVal')+"']").prop("checked",true);
			}else if($(this).attr('eType')=='select'){
				if( form.find("select[name='"+$(this).attr('eName')+"']").find("option[value='"+$(this).attr('eVal')+"']").length==0){
					//为Select追加一个Option(下拉项)
					form.find("select[name='"+$(this).attr('eName')+"']").append("<option selected='selected' value='"+$(this).attr('eVal')+"'>"+$(this).attr('eText')+"</option>");  
				}else{
					form.find("select[name='"+$(this).attr('eName')+"']").val($(this).attr('eVal'));
				}
			}
		});
		
	}
	
	init();
}
$(document).ready(function(){
		new cookieForm(); 
});


